package com.example.juc.big_talk_concurrent.chapter7.article2;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Test {

    static ExecutorService executorService = Executors.newFixedThreadPool(2);

    /**
     * execute 用于提交不需要返回值的任务，所以无法判断任务是否被线程池执行成功。
     * submit 用于提交需要返回值的任务，线程池会返回一个 Future 类型的对象，通过这个 Future 对象可以判断任务是否执行成功，并且可以通过 Future 的 get() 方法来获取返回值，get() 方法会阻塞当前线程直到任务完成。
     */
    public static void main(String[] args) {
        Runnable task = new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + " 执行任务");
            }
        };

        // 提交没有返回值的任务
        executorService.execute(task);
        executorService.execute(task);

        // 提交有返回值的任务
        executorService.submit(task);
        executorService.submit(task);

        executorService.shutdown();
    }
}
